## Importing Libraries
import pandas as pd
import plotly.graph_objects as go
import plotly.express as px
from IPython.display import display
import ipywidgets as widgets
pip install plotly
Requirement already satisfied: plotly in c:\users\dell\anaconda3\lib\site-packages (5.6.0) Requirement already satisfied: six in c:\users\dell\anaconda3\lib\site-packages (from plotly) (1.16.0) Requirement already satisfied: tenacity>=6.2.0 in c:\users\dell\anaconda3\lib\site-packages (from plotly) (8.0.1) Note: you may need to restart the kernel to use updated packages.
WARNING: Ignoring invalid distribution -ensorflow-intel (c:\users\dell\anaconda3\lib\site-packages) WARNING: Ignoring invalid distribution -ensorflow-intel (c:\users\dell\anaconda3\lib\site-packages) WARNING: Ignoring invalid distribution -ensorflow-intel (c:\users\dell\anaconda3\lib\site-packages) WARNING: Ignoring invalid distribution -ensorflow-intel (c:\users\dell\anaconda3\lib\site-packages) WARNING: Ignoring invalid distribution -ensorflow-intel (c:\users\dell\anaconda3\lib\site-packages) WARNING: Ignoring invalid distribution -ensorflow-intel (c:\users\dell\anaconda3\lib\site-packages)
## Data Preprocessing
poverty_data = pd.read_csv('poverty.csv')
loc = pd.read_csv('ISO.csv')
# Drop unnecessary columns from the ISO dataset
loc = loc.drop(['Alpha-2 code', 'ISO 3166-2', 'Numeric code'], axis=1)
# Renaming country column to help with merging later
loc = loc.rename(columns={'English short name lower case': 'country'})
# Renaming country column to help with merging later
poverty_data = poverty_data.rename(columns={'region': 'country', 'atk5': 'Atkinson_Coefficient_(epsilon=0.5)', 'd9010': 'Percentile_Ratio_(90/10)',
'poorAll6': 'Relative_Poverty_Rates_Total_Population_60%',
'poortp': 'Children_Poverty_Rates_Two_Parent_Families_50%',
'poorsm': 'Children_Poverty_Rates_Single_Mother_Families_50%',
'pkidsm': '%_Children_Living_in_Single_Mother_Families', 'eymed': 'Median_Equivalized_Income',
'average': 'Mean_Equivalized_Income'})
# Selecting only the columns we want to keep
poverty_data = poverty_data.loc[:, ['country', 'year', 'gini', 'Atkinson_Coefficient_(epsilon=0.5)', 'Percentile_Ratio_(90/10)',
'Relative_Poverty_Rates_Total_Population_60%', 'Children_Poverty_Rates_Two_Parent_Families_50%',
'Children_Poverty_Rates_Single_Mother_Families_50%', '%_Children_Living_in_Single_Mother_Families',
'Median_Equivalized_Income', 'Mean_Equivalized_Income']]
# Adding some corrections in the names of countries
corrections = {'Czech Rebuplic': 'Czech Republic', 'Cote D Ivoire': "Côte d'Ivoire", 'Palestine': 'Palestinian Territory, Occupied',
'South Korea': 'Korea, Republic of (South Korea)', 'United States': 'United States Of America'}
poverty_data['country'] = poverty_data['country'].replace(corrections)
# Merge the two dataframes
data = poverty_data.merge(loc, on='country')
data.to_csv('data.csv', index = False)
map_data = data.dropna()
fig = px.scatter_geo(map_data, locations = "Alpha-3 code", color = "country", hover_name = "country", size = "gini",
projection = "natural earth", animation_frame="year", template = "plotly_dark", title = "Gini index of countries over time",
hover_data=["Atkinson_Coefficient_(epsilon=0.5)", "Percentile_Ratio_(90/10)", "Relative_Poverty_Rates_Total_Population_60%",
"Children_Poverty_Rates_Two_Parent_Families_50%", "Children_Poverty_Rates_Single_Mother_Families_50%",
"%_Children_Living_in_Single_Mother_Families", "Median_Equivalized_Income", "Mean_Equivalized_Income"])
fig.show()
## Timeline of Gini Index of Countries
# List of countries to be plotted
countries = ['United States of America', 'United Kingdom', 'Japan', 'Russia', 'China', 'Germany', 'Korea, Republic of (South Korea)',
'India', 'South Africa']
# Plotting the graph
fig = px.line(title="Gini Index of Countries over time", template="plotly_dark")
for country in countries:
fig_data = data[(data.country == country) & (data.year >= 1990)][['year', 'gini']]
fig.add_trace(go.Scatter(x=fig_data['year'], y=fig_data['gini'], name=country, mode='lines'))
fig.update_layout(xaxis_title="Year", yaxis_title="Gini Index")
fig.show()
## Plots for different poverty rates
countries = ['Japan', 'Russia', 'India']
for country in countries:
# fig2_data = data[(data.country == country) & (data.year >= 0)][['year', 'gini']]
# print(fig2_data)
fig2 = px.line(title = country, template="plotly_dark")
fig2_data = data[(data.country == country) & (data.year >= 1990)][['year', 'Relative_Poverty_Rates_Total_Population_60%',
'Children_Poverty_Rates_Two_Parent_Families_50%',
'Children_Poverty_Rates_Single_Mother_Families_50%',
'%_Children_Living_in_Single_Mother_Families']]
fig2.add_trace(go.Scatter(x=fig2_data['year'], y=fig2_data['Relative_Poverty_Rates_Total_Population_60%'], name='Relative_Poverty_Rates_Total_Population_60%', mode='lines'))
fig2.add_trace(go.Scatter(x=fig2_data['year'], y=fig2_data['Children_Poverty_Rates_Two_Parent_Families_50%'], name='Children_Poverty_Rates_Two_Parent_Families_50%', mode='lines'))
fig2.add_trace(go.Scatter(x=fig2_data['year'], y=fig2_data['Children_Poverty_Rates_Single_Mother_Families_50%'], name='Children_Poverty_Rates_Single_Mother_Families_50%', mode='lines'))
fig2.add_trace(go.Scatter(x=fig2_data['year'], y=fig2_data['%_Children_Living_in_Single_Mother_Families'], name='%_Children_Living_in_Single_Mother_Families', mode='lines'))
fig2.update_layout(xaxis_title="Year", yaxis_title="Percentage")
fig2.show()
## Plots for different income
countries = ['Japan', 'Russia', 'India']
for country in countries:
# fig2_data = data[(data.country == country) & (data.year >= 0)][['year', 'gini']]
# print(fig2_data)
fig2 = px.line(title = country, template="plotly_dark")
fig2_data = data[(data.country == country) & (data.year >= 1990)][['year', 'Median_Equivalized_Income',
'Mean_Equivalized_Income']]
fig2.add_trace(go.Scatter(x=fig2_data['year'], y=fig2_data['Median_Equivalized_Income'], name='Median_Equivalized_Income', mode='lines'))
fig2.add_trace(go.Scatter(x=fig2_data['year'], y=fig2_data['Mean_Equivalized_Income'], name='Mean_Equivalized_Income', mode='lines'))
fig2.update_layout(xaxis_title="Year", yaxis_title="Income in country's currency")
fig2.show()